Если у
кого-нибудь в ЛКШ день рождения, устраивается праздник. Помогите культоргам
выяснить, сколько раз им устраивать дни рождения в течение смены ЛКШ.Август.
Вход. Количество
ЛКШат, отмечающих дни рождения в августе, затем числа, когда эти дни
рождения отмечаются. Количество именинников в ЛКШ.Август не более 300.
Выход. Вывести
количество праздников.
Пример входа |
Пример выхода |
6 1 2
5 2 2 20 |
4 |
РЕШЕНИЕ
сортировка подсчетом
Анализ алгоритма
Отметим, что нас
интересуют дни рождения только за август (один месяц), в котором 31 день. Для
каждого дня от 1 до 31 подсчитаем, сколько ЛКШат родилось именно в этот день. А
потом подсчитаем количество дней, в которых ЛКШата празднуют дни рождения.
Реализация алгоритма
Дни рождения могут
принимать значения от 1 до 31 включительно (в августе 31 день). В ячейке m[i] подсчитаем количество ЛКШат, у
которых день рождения приходится в точности на день номер i.
#define MAX 32
int m[MAX];
Основная часть
программы.
scanf("%d",&n);
memset(m,0,sizeof(m));
Для каждого дня подсчитываем количество ЛКШат, у которых в
этот день день рождения.
for(i = 0; i < n; i++)
{
scanf("%d",&day);
m[day]++;
}
В переменной res
подсчитаем количество дней, в которое празднуются дни рождения. Если m[i] не равно нулю, то существует хотя бы
один ученик, у которого день рождения i-го
августа.
for(res = i = 0; i < MAX; i++)
if (m[i]) res++;
Выводим количество праздников.
printf("%d\n",res);